package com.thouiot.modbus.config;

import com.thouiot.modbus.config.properties.ModbusMasterProperties;
import com.thouiot.modbus.config.properties.ModbusSlaveProperties;
import com.thouiot.modbus.component.ModbusMasterHolder;
import com.thouiot.modbus.component.ModbusSlaveHolder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * modbus 主机/从机分别有4种类型，TCP, RTU, ASCII, UDP
 * 允许用户配置多个主机，从机
 * 实现对指定主机的数据读写、对指定从机的数据读写
 * 根据以上需求，需实现多个主机、从机的配置和初始化
 *
 * @description modbus配置类
 * @author wangkai
 * @date 2025/04/10 13:33
 */
@Configuration
@EnableConfigurationProperties(value = {ModbusMasterProperties.class, ModbusSlaveProperties.class})
public class ModbusConfig {

    @Resource
    private ModbusMasterHolder modbusMasterHolder;

    @Resource
    private ModbusSlaveHolder modbusSlaveHolder;

    @PostConstruct
    public void init() {
        // 先建从机，再建主机。因为tcp 主机连不上从机会报错
        modbusSlaveHolder.initModbusSlaves();
        modbusMasterHolder.initModbusMasters();
    }

    /**
     * 在容器销毁时，关闭所有modbusMaster、modbusSlave
     */
    @PreDestroy
    public void closeModbusMasters() {
        modbusMasterHolder.closeModbusMasters();
        modbusSlaveHolder.closeModbusSlaves();
    }
}
